﻿#pragma warning disable IDE1006
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WUDI.ECharts.Polar.Tooltip.AxisPointer
{
	/// <summary>
	/// 坐标轴指示器配置项
	/// <para>
	/// tooltip.axisPointer 是配置坐标轴指示器的快捷方式
	/// </para>
	/// <para>
	/// 实际上坐标轴指示器的全部功能，都可以通过轴上的 axisPointer 配置项完成（例如 angleAxis.axisPointer
	/// </para>
	/// <para>
	/// #angleAxis.axisPointer）
	/// </para>
	/// <para>
	/// 但是使用 tooltip.axisPointer 在简单场景下会更方便一些
	/// </para>
	/// <para>
	/// 注意
	/// </para>
	/// <para>
	/// tooltip.axisPointer 中诸配置项的优先级低于轴上的 axisPointer 的配置项
	/// </para>
	/// <para>
	/// 坐标轴指示器是指示坐标轴当前刻度的工具
	/// </para>
	/// <para>
	/// 如下例，鼠标悬浮到图上，可以出现标线和刻度文本
	/// </para>
	/// <para>
	/// 上例中，使用了 axisPointer.link
	/// </para>
	/// <para>
	/// #axisPointer.link 来关联不同的坐标系中的 axisPointer
	/// </para>
	/// <para>
	/// 一般来说，axisPointer 的具体配置项会配置在各个轴中（如 tooltip.axisPointer
	/// </para>
	/// <para>
	/// #tooltip.axisPointer）
	/// </para>
	/// <para>
	/// 但是这几个选项只能配置在全局的 axisPointer 中
	/// </para>
	/// <para>
	/// axisPointer.link
	/// </para>
	/// <para>
	/// #axisPointer.link
	/// </para>
	/// <para>
	/// 直角坐标系 single
	/// </para>
	/// <para>
	/// #single 中的每个轴都自己的 axisPointer
	/// </para>
	/// <para>
	/// 设置轴上的 axisPointer.show（例如 xAxis.axisPointer.show
	/// </para>
	/// <para>
	/// #xAxis.axisPointer.show）为 true，则显示此轴的 axisPointer
	/// </para>
	/// <para>
	/// 设置 tooltip.axisPointer.axis
	/// </para>
	/// <para>
	/// #tooltip.axisPointer.axis 改变这种选择
	/// </para>
	/// <para>
	/// 注意，轴上如果设置了 axisPointer，会覆盖此设置
	/// </para>
	/// <para>
	/// 设置轴上的 axisPointer.label.show（例如 xAxis.axisPointer.label.show
	/// </para>
	/// <para>
	/// #xAxis.axisPointer.show）为 true，则显示此轴的 axisPointer 的 label
	/// </para>
	/// <para>
	/// 设置 tooltip.axisPointer.type
	/// </para>
	/// <para>
	/// #tooltip.axisPointer.type 为 cross 时会自动显示 axisPointer 的 label
	/// </para>
	/// <para>
	/// 关于触屏的 axisPointer 的设置
	/// </para>
	/// <para>
	/// 设置轴上的 axisPointer.handle.show（例如 xAxis.axisPointer.handle.show
	/// </para>
	/// <para>
	/// #xAxis.axisPointer.handle.show 为 true 则会显示出此 axisPointer 的拖拽按钮
	/// </para>
	/// <para>
	/// （polar 坐标系暂不支持此功能）
	/// </para>
	/// <para>
	/// 如果发现此时 tooltip 效果不良好，可设置 tooltip.alwaysShowContent
	/// </para>
	/// <para>
	/// #tooltip.alwaysShowContent 为 true（效果为 tooltip 一直显示）
	/// </para>
	/// <para>
	/// 参见snap
	/// </para>
	/// <para>
	/// <see href="https://echarts.apache.org/examples/zh/editor.html?c=line-tooltip-touch&amp;edit=1&amp;reset=1"/>，则 axisPointer 会自动吸附到最近的点上
	/// </para>
	/// </summary>
	public class AxisPointer
	{

		/// <summary>
		/// 指示器类型
		/// <para>
		/// 可选
		/// </para>
		/// <para>
		/// line 直线指示器
		/// </para>
		/// <para>
		/// shadow 阴影指示器
		/// </para>
		/// <para>
		/// none 无指示器
		/// </para>
		/// <para>
		/// cross 十字准星指示器
		/// </para>
		/// <para>
		/// 其实是种简写，表示启用两个正交的轴的 axisPointer
		/// </para>
		/// </summary>
		public dynamic type { get; set; }  = "line";

		/// <summary>
		/// 指示器的坐标轴
		/// <para>
		/// 默认情况，坐标系会自动选择显示哪个轴的 axisPointer（默认取类目轴或者时间轴）
		/// </para>
		/// <para>
		/// 可以是 x, y, radius, angle
		/// </para>
		/// </summary>
		public dynamic axis { get; set; }  = "auto";

		/// <summary>
		/// 坐标轴指示器是否自动吸附到点上
		/// <para>
		/// 默认自动判断
		/// </para>
		/// <para>
		/// 这个功能在数值轴和时间轴上比较有意义，可以自动寻找细小的数值点
		/// </para>
		/// </summary>
		public dynamic snap { get; set; } 

		/// <summary>
		/// 坐标轴指示器的 z 值。控制图形的前后顺序。z值小的图形会被z值大的图形覆盖。
		/// </summary>
		public dynamic z { get; set; } 

		/// <summary>
		/// 坐标轴指示器的文本标签。
		/// </summary>
		public WUDI.ECharts.Polar.Tooltip.AxisPointer.Label label { get; set; } 

		/// <summary>
		/// axisPointer.type
		/// <para>
		/// #tooltip.axisPointer.type 为 line 时有效
		/// </para>
		/// </summary>
		public WUDI.ECharts.Polar.Tooltip.AxisPointer.LineStyle lineStyle { get; set; } 

		/// <summary>
		/// axisPointer.type
		/// <para>
		/// #tooltip.axisPointer.type 为 shadow 时有效
		/// </para>
		/// </summary>
		public WUDI.ECharts.Polar.Tooltip.AxisPointer.ShadowStyle shadowStyle { get; set; } 

		/// <summary>
		/// axisPointer.type
		/// <para>
		/// #tooltip.axisPointer.type 为 cross 时有效
		/// </para>
		/// </summary>
		public WUDI.ECharts.Polar.Tooltip.AxisPointer.CrossStyle crossStyle { get; set; } 

		/// <summary>
		/// 是否开启动画。
		/// </summary>
		public dynamic animation { get; set; }  = true;

		/// <summary>
		/// 是否开启动画的阈值，当单个系列显示的图形数量大于这个阈值时会关闭动画。
		/// </summary>
		public dynamic animationThreshold { get; set; }  = 2000;

		/// <summary>
		/// 初始动画的时长，支持回调函数，可以通过每个数据返回不同的时长实现更戏剧的初始动画效果。
		/// <para>number/Function</para>
		/// </summary>
		public dynamic animationDuration { get; set; }  = 1000;

		/// <summary>
		/// 初始动画的缓动效果
		/// <para>
		/// 不同的缓动效果可以参考 缓动示例
		/// </para>
		/// <para>
		/// <see href="https://echarts.apache.org/examples/zh/editor.html?c=line-easing"/>
		/// </para>
		/// </summary>
		public WUDI.ECharts.AnimationEasing animationEasing { get; set; }  = WUDI.ECharts.AnimationEasing.cubicOut;

		/// <summary>
		/// 初始动画的延迟，支持回调函数，可以通过每个数据返回不同的 delay 时间实现更戏剧的初始动画效果
		/// <para>
		/// 也可以看该示例
		/// </para>
		/// <para>
		/// <see href="https://echarts.apache.org/examples/zh/editor.html?c=bar-animation-delay"/>
		/// </para>
		/// <para>number/Function</para>
		/// </summary>
		public dynamic animationDelay { get; set; }  = 0;

		/// <summary>
		/// 数据更新动画的时长。
		/// 支持回调函数，可以通过每个数据返回不同的时长实现更戏剧的更新动画效果。
		/// <para>number/Function</para>
		/// </summary>
		public dynamic animationDurationUpdate { get; set; }  = 200;

		/// <summary>
		/// 数据更新动画的缓动效果。
		/// </summary>
		public WUDI.ECharts.AnimationEasing animationEasingUpdate { get; set; }  = WUDI.ECharts.AnimationEasing.exponentialOut;

		/// <summary>
		/// 数据更新动画的延迟，支持回调函数，可以通过每个数据返回不同的 delay 时间实现更戏剧的更新动画效果
		/// <para>
		/// 也可以看该示例
		/// </para>
		/// <para>
		/// <see href="https://echarts.apache.org/examples/zh/editor.html?c=bar-animation-delay"/>
		/// </para>
		/// <para>number/Function</para>
		/// </summary>
		public dynamic animationDelayUpdate { get; set; }  = 0;

	}
}